/** 
 * Project Name:extWeb 
 * File Name:SystemFrameController.java 
 * Package Name:com.spring.extjs.controller 
 * Date:2015年2月10日下午10:30:31 
 * Copyright (c) 2015, chj_0507_dz@sina.com All Rights Reserved. 
 * 
 */

package com.spring.extjs.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.spring.extjs.service.ISystemFrameService;
import com.spring.extjs.util.ModuleServiceFunction;
import com.spring.extjs.util.annotation.TableDefine;

/**
 * ClassName:SystemFrameController <br/>
 * Function: 自动生成模块数据也是根据前台调用来完成. <br/>
 * Reason: TODO ADD REASON. <br/>
 * Date: 2015年2月10日 下午10:30:31 <br/>
 * 
 * @author chj_0507_dz@sina.com
 * @version
 * @since JDK 1.6
 * @see
 */
@Controller
@RequestMapping("/systemframe")
public class SystemFrameController {

	@Autowired
	private ISystemFrameService systemFrameService;

	/**
	 * 根据类名加入module 定义以及字段定义，生成grid form 的缺省
	 * 
	 * @param moduleName
	 * @return
	 */

	@RequestMapping(value = "/addmodule.do", produces = "application/json;text/plain;charset=UTF-8")
	// @Override
	public @ResponseBody String addModuleWithName(String moduleName) {
		Class<?> moduleClass = ModuleServiceFunction.getModuleBeanClass(moduleName);
		if (moduleClass == null)
			return "未在指定的包中找到类:" + moduleName + "!";

		TableDefine tableDefine = (TableDefine) moduleClass.getAnnotation(TableDefine.class);
		if (tableDefine == null)
			return "未在指定的类中找到tableDefine的标注定义";

		String result = systemFrameService.addModuleWithName(moduleName, moduleClass, tableDefine);
		if (result == null) {
			// 生成此模块的字段
			systemFrameService.refreshModuleField(String.valueOf(tableDefine.id()));
			// 创建新的列表数据
			systemFrameService.createNewGridScheme(String.valueOf(tableDefine.id()), moduleClass);
			// 创建新的表单数据
			systemFrameService.createNewFormScheme(String.valueOf(tableDefine.id()), moduleClass);
		}
		return null;
	}
}
